var ChainSeg = require('geoPhysicsChainSeg');
/**
 * 创建物理链条的工具组件
 */
cc.Class({
    extends: cc.Component,

    properties: {
        segs: {
            default: [],
            type: [cc.Node],
            tooltip: '节点以及孩子节点中的geoPhysicsChainSeg组件都会被按顺序用于构造链。',
        },
        buildOnLoad: false,
    },

    onLoad() {
        if (this.buildOnLoad == true)
            this.buildChain(this.segs);
    },
    /**
     * 将传入的segs组成链条
     * @param {[cc.Node]} segs 
     */
    buildChain(segs) {
        segs = segs || this.segs;
        this._buildChain(segs);
    },
    _buildChain(segs) {
        // 记录上一个seg
        var lastChainSeg = null;
        //
        var _doChain = function(chainSeg){
            if (chainSeg != null) {
                if (lastChainSeg != null) {
                    // 链接当前与上一个
                    chainSeg.getJoint().connectedBody = lastChainSeg.getRigid();
                }
                // 当前的作为上一个
                lastChainSeg = chainSeg;
            }    
        };
        segs.forEach(seg => {
            // 对所有segs里的节点执行walk
            seg.walk(node => {
                // 获得节点上的ChainSeg
                _doChain(node.getComponent(ChainSeg));
            });
        });
    }
});
